package 面试题;

public class 海康威视交替顺序交替打印 {
    private static int count = 1;
    private static Object lock = new Object();


    /*
    定义两个线程
    第一个线程打印奇数
    第二个线程打印偶数
    使用synchronized 对象锁实现
     */

//    public static void main(String[] args) {
//        new Thread(() -> {
//            while (count < 8){
//                synchronized (lock){
//                    if ((count & 1) == 1){
//                        System.out.println(Thread.currentThread().getName() + " : " + count++);
//                    }
//                }
//            }
//        },"t1").start();
//        new Thread(() -> {
//            while (count < 8){
//                synchronized (lock){
//                    if ((count & 1) == 0){
//                        System.out.println(Thread.currentThread().getName() + " : " + count++);
//                    }
//                }
//            }
//        },"t2").start();
//    }

    public static void main(String[] args) {
        new Thread(new Print(),"t1").start();
        new Thread(new Print(),"t2").start();
    }

    static class Print implements Runnable{

        @Override
        public void run() {
            //先判断是否是小于100
            while (count <= 10){
                //在竞争锁
                synchronized (lock){
                    //打印结果
                    System.out.println(Thread.currentThread().getName() + ":" + count++);
                    //唤醒其他线程
                    lock.notifyAll();
                    //如果还可以循环，就让自己休眠，等待其他线程唤醒
                    if (count <= 10){
                        try {
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }
}
